package utils

import (
	"crypto/rand"
	"fmt"
	"log"
	"math/big"
	"time"

	"github.com/google/uuid"
)

// GenerateVerificationCode 生成6位数字验证码
func GenerateVerificationCode() string {
	const digits = "0123456789"
	code := make([]byte, 6)

	for i := range code {
		n, err := rand.Int(rand.Reader, big.NewInt(int64(len(digits))))
		if err != nil {
			// 如果随机数生成失败，使用时间戳生成
			return fmt.Sprintf("%06d", time.Now().UnixNano()%1000000)
		}
		code[i] = digits[n.Int64()]
	}

	return string(code)
}

// GenerateVerificationID 生成验证码ID
func GenerateVerificationID() string {
	return uuid.New().String()
}

// SendSMS 发送短信验证码 (模拟发送)
func SendSMS(phone, code string) error {
	// 在实际项目中，这里应该调用真实的短信服务 API
	// 比如阿里云短信、腾讯云短信等

	log.Printf("📱 发送短信验证码到 %s: %s", phone, code)
	log.Printf("💡 这是模拟发送，实际项目中需要集成真实的短信服务")

	// 模拟网络延迟
	time.Sleep(100 * time.Millisecond)

	return nil
}

// IsValidPhoneNumber 验证手机号格式 (简单验证)
func IsValidPhoneNumber(phone string) bool {
	// 简单的中国手机号验证
	if len(phone) != 11 {
		return false
	}

	// 检查是否以1开头
	if phone[0] != '1' {
		return false
	}

	// 检查是否都是数字
	for _, digit := range phone {
		if digit < '0' || digit > '9' {
			return false
		}
	}

	return true
}

// VerificationCodeExpiration 验证码过期时间 (5分钟)
const VerificationCodeExpiration = 5 * time.Minute
